<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>等待中的任务 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/_pending_tasks.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/_pending_tasks.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_pending_tasks.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/_pending_tasks.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="administration.html">管理、监控和部署</a></span>
»
<span class="breadcrumb-link"><a href="cluster-admin.html">监控</a></span>
»
<span class="breadcrumb-node">等待中的任务</span>
</div>
<div class="navheader">
<span class="prev">
<a href="_index_stats.html">« 索引统计</a>
</span>
<span class="next">
<a href="_cat_api.html">cat API »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_pending_tasks"></a>等待中的任务 (Pending Tasks)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/500_Cluster_Admin/40_other_stats.asciidoc">edit</a>
</h2>
</div></div></div>
<p>有一些任务只能由主节点去处理，比如创建一个新的索引或者在集群中移动分片。由于一个集群中只能有一个主节点，所以只有一个节点可以处理集群级别的元数据变更。在 99.9999% 的时间里，这不会有什么问题。元数据变更的队列基本上保持为零。</p>

<p>在一些 <code class="literal">罕见</code> 的集群里，元数据变更的次数比主节点能处理的还快。这会导致等待中的操作会累积成队列。</p>

<p><code class="literal">pending-tasks</code> API  会展示队列中（如果有的话）等待的集群级别的元数据的变更操作：</p>

<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">GET _cluster/pending_tasks</pre>
</div>
<p>通常，响应是像这样的：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
   "tasks": []
}</pre>
</div>
<p>这意味着没有等待中的任务。
如果你有一个罕见的集群在主节点出现瓶颈了，等待中的任务列表可能会像这样：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
   "tasks": [
      {
         "insert_order": 101,
         "priority": "URGENT",
         "source": "create-index [foo_9], cause [api]",
         "time_in_queue_millis": 86,
         "time_in_queue": "86ms"
      },
      {
         "insert_order": 46,
         "priority": "HIGH",
         "source": "shard-started ([foo_2][1], node[tMTocMvQQgGCkj7QDHl3OA], [P],
         s[INITIALIZING]), reason [after recovery from gateway]",
         "time_in_queue_millis": 842,
         "time_in_queue": "842ms"
      },
      {
         "insert_order": 45,
         "priority": "HIGH",
         "source": "shard-started ([foo_2][0], node[tMTocMvQQgGCkj7QDHl3OA], [P],
         s[INITIALIZING]), reason [after recovery from gateway]",
         "time_in_queue_millis": 858,
         "time_in_queue": "858ms"
      }
  ]
}</pre>
</div>
<p>可以看到任务都被指派了优先级（比如<code class="literal">URGENT</code>要比 <code class="literal">HIGH</code>更早处理 ），任务插入的顺序、操作进入队列多久，以及打算处理什么。在上面的列表中，有一个<code class="literal">创建索引(create-index)</code>和两个 <code class="literal">启动分片(shard-started)</code>的操作在等待。</p>

<div class="sidebar">
<div class="titlepage"><div><div>
<p class="title"><strong>什么时候应该担心等待中的任务？</strong></p>
</div></div></div>
<p>就像曾经提到过的，主节点很少会成为集群的瓶颈。
唯一可能成为瓶颈的是集群状态非常大<em>而且</em>更新频繁。</p>

<p>例如，如果你允许客户按照他们的意愿创建任意的动态字段，而且每个客户每天都有一个独立索引，那么你的集群状态会变得非常大。集群状态包括 ( 但不限于 ) 所有索引及其类型，以及每个索引的全部字段。</p>

<p>所以如果你有 100000 客户，然后每个客户平均有 1000 个字段，而且数据有 90 天的保留期 --  这就有九十亿个字段需要保存在集群状态中。不管它何时发生变更，所有的节点都需要被通知到。</p>

<p>主节点必须处理这些变更，这需要不小的 CPU 开销，加上推送变更的集群状态到所有节点的网络开销。</p>

<p>这就是那些可以看到集群状态操作队列上涨的集群。没有简单的办法可以解决这个问题，不过你有三个选择：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
使用一个更强大的主节点。不幸的是，这种垂直扩展只是延迟了这种必然结果的出现而已。
</li>
<li class="listitem">
通过某些方式限定文档的动态性质来限制集群状态的大小。
</li>
<li class="listitem">
到达某个阈值后组建另外一个集群。
</li>
</ul>
</div>
</div>
</div>
<div class="navfooter">
<span class="prev">
<a href="_index_stats.html">« 索引统计</a>
</span>
<span class="next">
<a href="_cat_api.html">cat API »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>